<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <style>
       /* 填写样式 */
    </style>
</head>

<body>
    <!-- 填写标签 -->
    <script type="text/javascript">
        /**
         * 这题很有意思昂，相当于写一个自定义日期格式化输出的方法
         * 我们这里顺便复习一下原型链的知识，将函数作为类型原型链上的方法
         * 第一点要注意的是匹配规则的顺序，比如yyyy需要在yy前面，否则可能多次匹配
         * 第二点需要注意的是前置零的问题，这里我们使用递归封装了个函数用于实现自定义个数的前置零
         * 当然其中要注意字符串化，否则在长度判断时可能出错
         * 第三点也是比较容易忽略的一点，需要使用this时别写箭头函数，否则拿不到当前this
         * 第四点是一个美观方便的函数charAt，根据下标获取字符串字符
         */
        // 填写JavaScript
        const formatDate=(date,formatType)=>{
            return date.getElements(formatType);
        }

        /**
         * 可变长度前置补零
         * @param {*} str - 输入字符串
         * @param {*} toLength - 目标长度
         * @returns {String} - 补零后的字符串
         */
        const zerocomplete=(str,toLength=2)=>String(str).length>=toLength?String(str):zerocomplete('0'+String(str),toLength);
        
        /**
         * 在Date类型原型链上添加日期格式化方法
         * @param {String} formatType - 格式化类型
         * @returns {String} - 格式化后的字符串 
         */
        Date.prototype.getElements=function(formatType){
            let gets={
                yyyy:this.getFullYear(),
                yy:this.getFullYear().toString().substr(2),
                MM:zerocomplete(this.getMonth()+1),
                M:this.getMonth()+1,
                dd:zerocomplete(this.getDate()),
                d:this.getDate(),
                HH:zerocomplete(this.getHours()),
                H:this.getHours(),
                hh:zerocomplete(this.getHours()%12),
                h:this.getHours()%12,
                mm:zerocomplete(this.getMinutes()),
                m:this.getMinutes(),
                ss:zerocomplete(this.getSeconds()),
                s:this.getSeconds(),
                w: ['日', '一', '二', '三', '四', '五', '六'].join('').charAt(this.getDay())
            }
            Object.keys(gets).forEach(key=>{
                formatType=formatType.replace(key,gets[key])
            })
            return formatType;
        }

        console.log(formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w'));
    </script>
</body>

</html>